package com.briup.product_source.util;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * 二维码工具类
 * @Author briup
 * @Date 2023/6/20
 */
public class QRcodeUtil {
    private static int width = 600; //图形宽
    private static int height = 600;//图形高
    private static String charset = "utf-8";//内容编码格式
    private static String path = "E:/image"; //存储图片路径

    /**
     * 生成二维码
     * @param contents 二维码内容
     * @return 二维码图片名称
     */
    public static String createQRcode(String contents,String path) {
        try{
            //1.创建一个对象 什么类型
            MultiFormatWriter writer = new MultiFormatWriter();
            //2.生成二维码矩阵信息对象  BitMatrix类型
            Map<EncodeHintType,Object> params = new HashMap<>();
            //设置解析字符串编码格式：utf-8
            params.put(EncodeHintType.CHARACTER_SET,charset);
            params.put(EncodeHintType.MARGIN,1); //设置边框间距
            BitMatrix matrix = writer.encode(contents, BarcodeFormat.QR_CODE, width, height, params);
            //3.创建绘制二维码图案：BufferedImage类型
            BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //通过绘制不同颜色的rgb色绘制内容
            int blackrgb = Color.BLACK.getRGB(); //黑色对应的rgb
            int whitergb = Color.WHITE.getRGB();//白色对应的rgb
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    //设置不同坐标点显示的颜色
                    //通过矩阵对象判断该坐标点是否是true如果为true 绘制黑色
                    image.setRGB(i,j,matrix.get(i,j)?blackrgb:whitergb);
                }
            }
            //将bufferedImage图案信息 保存在磁盘中
            String fileName = UUID.randomUUID().toString()+".jpg";
            File file = new File(path, fileName);
            ImageIO.write(image,"jpg",file);
            //二维码生成，返回文件名称
            return fileName;
        }catch (Exception e){
            e.printStackTrace();//打印异常
            throw new RuntimeException("二维码生成异常");
        }
    }
    public static String createQRcode(String contents) {
        try{
            //1.创建一个对象 什么类型
            MultiFormatWriter writer = new MultiFormatWriter();
            //2.生成二维码矩阵信息对象  BitMatrix类型
            Map<EncodeHintType,Object> params = new HashMap<>();
            //设置解析字符串编码格式：utf-8
            params.put(EncodeHintType.CHARACTER_SET,charset);
            params.put(EncodeHintType.MARGIN,1); //设置边框间距
            BitMatrix matrix = writer.encode(contents, BarcodeFormat.QR_CODE, width, height, params);
            //3.创建绘制二维码图案：BufferedImage类型
            BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //通过绘制不同颜色的rgb色绘制内容
            int blackrgb = Color.BLACK.getRGB(); //黑色对应的rgb
            int whitergb = Color.WHITE.getRGB();//白色对应的rgb
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    //设置不同坐标点显示的颜色
                    //通过矩阵对象判断该坐标点是否是true如果为true 绘制黑色
                    image.setRGB(i,j,matrix.get(i,j)?blackrgb:whitergb);
                }
            }
            //将bufferedImage图案信息 保存在磁盘中
            String fileName = UUID.randomUUID().toString()+".jpg";
            File file = new File(path, fileName);
            ImageIO.write(image,"jpg",file);
            //二维码生成，返回文件名称
            return fileName;
        }catch (Exception e){
            e.printStackTrace();//打印异常
            throw new RuntimeException("二维码生成异常");
        }
    }
}
